是否可以使用CUDA中的推力库对2D数组使用thrust::device

您所在的位置:网站首页 vector developer 是否可以使用CUDA中的推力库对2D数组使用thrust::device

是否可以使用CUDA中的推力库对2D数组使用thrust::device

#是否可以使用CUDA中的推力库对2D数组使用thrust::device| 来源: 网络整理| 查看: 265

在STL和thrust中,vector是数据元素的容器,遵循严格的线性序列,因此它本质上是一维的。实际上,这些数据元素可以是普通类型,甚至是结构和对象,但它们不能是其他向量(与STL不同)。

您可以创建向量数组,但通常需要对数组中的每个向量逐个执行推力操作。

关于语法,您不能这样做:

thrust::device_vector D[5][10];

你可以这样做:

thrust::device_vector D[5][10];

然而,这将创建一个二维向量数组,这不是您想要的,我不认为。

在许多情况下,2-D数组可以被“扁平化”,就像它们是1维的一样,并且在不了解更多关于您的情况的情况下,这是我建议研究的。例如,如果您可以使用指针索引将2-D数组视为1-D数组,那么您可以使用单个with::fill调用来填充整个数组。

我还建议大家熟悉一下thrust quick start guide。

以下是一个工作示例,显示了主机上具有基本展平的2D数组:

#include #include #include #define H 5 #define W 10 __global__ void kernel(int *data, int row, int col) { printf("Element (%d, %d) = %d\n", row, col, data[(row*W)+col]); } int main(void) { int h[H][W]; thrust::device_vector d(H*W); thrust::copy(&(h[0][0]), &(h[H-1][W-1]), d.begin()); thrust::sequence(d.begin(), d.end()); kernel(thrust::raw_pointer_cast(d.data()), 2, 3); cudaDeviceSynchronize(); return 0; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3